/*************************************************
* 描述：复选控件
*
* File：cximuticombobox.h
* Author：chenanqi@mozihealthcare.cn
* Date：25-10-14
* Update：
* ************************************************/

#ifndef COREXI_COMMON_PC_CXIMUTICOMBOBOX_H
#define COREXI_COMMON_PC_CXIMUTICOMBOBOX_H

#include <QWidget>
#include <controls/export.h>
#include <QVariant>
class CxiMutiComboBoxPrivate;

class CXI_CONTROLS_EXPORT ComboItem
{
public:
	ComboItem() = default;

	ComboItem(const ComboItem&) = default;

	ComboItem(const QString& display,
			 const QString& data,
			 const QVariant& tag, const QVector<QString>& filterWords = {});

	bool hasSubString(const QString& subString) const;
public:
	QString  display = QString{};							// 显示文本
	QString  data	 = QString{};							// 绑定数据
	QVariant tag	 = QVariant{};							// 存储位
	QVector<QString> filterWords = QVector<QString>{};		// display的别名
};

Q_DECLARE_METATYPE(ComboItem)

class CXI_CONTROLS_EXPORT CxiMutiComboBox : public QWidget
{
	Q_OBJECT
	Q_DECLARE_PRIVATE(CxiMutiComboBox)
public:
	explicit CxiMutiComboBox(QWidget* parent = nullptr);
	~CxiMutiComboBox() override;

	void setPopupVisible(bool visible);

	/**
	 * 添加项
	 * @param display 展示数据
	 * @param data 绑定数据
	 * @param tag 存储为
	 * @param filterWords 别名
	 */
	void addItem(const QString& display, const QString& data, const QVariant& tag, const QVector<QString>& filterWords);
	/**
	 * 添加项(重载)
	 * @param item 一项数据
	 */
	void addItem(const ComboItem& item);
	/**
	 * 批量添加数据
	 * @param items
	 */
	void addItems(const QList<ComboItem>& items);

	/**
	 * 获取所有存储数据
	 * @return
	 */
	QVector<QVariant> getTags() const;

	/**
	 * 获取所有绑定数据
	 * @return
	 */
	QVector<QString> getDatas() const;
private:
	CxiMutiComboBoxPrivate* d_ptr;
};


#endif//COREXI_COMMON_PC_CXIMUTICOMBOBOX_H
